<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    <title>SLF4J News</title>
    <link rel="stylesheet" type="text/css" media="screen" href="css/site.css" />
    <link rel="stylesheet" type="text/css" href="css/prettify.css" />
  </head>
 <body onload="prettyPrint()">
    <script type="text/javascript">prefix='';</script>
    <script type="text/javascript" src="js/prettify.js"></script>
    
    <script src="templates/header.js" type="text/javascript"></script>
    <div id="left">
      <script src="templates/left.js" type="text/javascript"></script>
    </div>
    <div id="right">
      <script src="templates/right.js" type="text/javascript"></script>
    </div>

    <div id="content">
      

   <h1>SLF4J News</h1>

   <p>Please note that you can receive SLF4J related announcements by
   subscribing to the <a
   href="http://www.qos.ch/mailman/listinfo/announce">QOS.ch
   announce</a> mailing list.
   </p>

   <!-- 
   Conventions:
     file names in <em/>
     class names in <code/>
   -->

   <hr noshade="noshade" size="1"/>
   
   <h3>12th of August, 2021 - Release of SLF4J 2.0.0-alpha4</h3>

   <p class="highlight">The the 2.0.x series requires Java&nbsp;8 and
   adds a backward-compatible <a
   href="manual.html#fluent">fluent logging api</a>.
   <br/>   <br/>
   Moreover, SLF4J has been modularized per <a
   href="http://openjdk.java.net/projects/jigsaw/spec/">JPMS/Jigsaw</a>
   specificaton. The resulting internal changes are <a class="big
   bold" href="faq.html#changesInVersion200">detailed</a> in the FAQ
   page.
   </p>

   <p>SLF4J version 2.0.0 requires Java 8. It builds upon the 1.8.x
   series and adds a backward-compatible <a
   href="manual.html#fluent">fluent logging api</a>.  By
   backward-compatible, we mean that existing logging frameworks do
   not have to be changed for the user to benefit from the fluent
   logging API. However, existing frameworks must migrate to the
   <code>ServiceLoader</code> mechanism.  The resulting internal
   changes are <a class="big bold"
   href="faq.html#changesInVersion200">detailed</a> in the FAQ page.
   </p>

   <p>&bull; Added support for the <a
   href="https://openjdk.java.net/jeps/264">Java Platform Logging API
   (JEP 264)</a> in the new <em>slf4j-jdk-platform-logging</em>
   module. JEP 264 was added in Java 9. Many thanks to Nicolai Parlog
   for providing the relevant PR.
   </p>
   
   <hr noshade="noshade" size="1"/>
   
   <h3>10th of August, 2021 - Release of SLF4J 2.0.0-alpha3</h3>
  
   <p>In addition to fixes imported from the 1.7 branch, such as <a
   href="https://jira.qos.ch/browse/SLF4J-515">SLF4J-515</a>, this
   version consists of changes visible only to frameworks implementing
   the SLF4J API.
   </p>
   <ul>
     <li>In <code>DefaultLoggingEventBuilder</code>, the
     <code>innerLog(LoggingEvent)</code> method was renamed as
     <code>log</code> and its visibility changed to
     <code>protected</code>.
     </li>
     <li>In <code>DefaultLoggingEventBuilder</code>, the
     <code>loggingEvent</code> and <code>logger</code> fields have
     their visibility changed to <code>protected</code>.
     </li>
     <li>The <code>getRequesteApiVersion</code> method in
     <code>SLF4JServiceProvider</code> was renamed as
     getRequeste<b>d</b>ApiVersion. This fixes <a
     href="https://jira.qos.ch/browse/SLF4J-516">SLF4J-516</a>.</li>

   </ul>

   <p>Fixed resource path to <code>NOPServiceProvider</code> in
   slf4j-nop module. This fixes <a
   href="https://jira.qos.ch/browse/SLF4J-518">SLF4J-518</a>.</p>

   <hr noshade="noshade" size="1"/>

   <h3>20th of July, 2021 - Release of SLF4J 1.7.32</h3>

   <p>In the slf4j-simple module, <code>SimpleLogger</code> now caters
   for concurrent access. This fixes <a
   href="https://jira.qos.ch/browse/SLF4J-515">SLF4J-515</a> as
   reported by Tibor Digana.
   </p>
   
   <hr noshade="noshade" size="1"/>

   <h3>2nd of July, 2021 - Release of SLF4J 2.0.0-alpha2</h3>
        
   <p>&bull; Fixed important bug in the fluent API. The
   <code>LoggingEventBuilder.addArgument(Supplier)</code> method now
   takes <code>Supplier&lt;?&gt;</code> and not
   <code>Supplier&lt;Object&gt;</code>. This problem was reported in
   <a href="https://jira.qos.ch/browse/SLF4J-485">SLF4J-485</a> by
   Christoffer Hammarstr&ouml;m who also provided a relevant test case.</p>
 
 
   <p>&bull; Added support for the native OSGi service loader mechanism as
   described in <a
   href="https://jira.qos.ch/browse/SLF4J-457">SLF4J-457</a>. Our
   gratidude goes to Bj&ouml;rn Kautler for ptoviding the relevant PR.</p>

   <p>&bull;Fixed inccorect location information computation when fluent API
   is used. This issue was reported in <a
   href="https://jira.qos.ch/browse/SLF4J-511">SLF4J-511</a> by Ralph
   Goers.
   </p>

   <p>Printing methods in the <code>LoggerWrapper</code> class part of
   slf4j-ext spuriously called <code>MessageFormatter.format()</code>
   method before delegating logging to the wrapped logger. However,
   the wrapped logger invoked <code>MessageFormatter.format()</code> a
   second time. The second call is usually innocuous unless the String
   representation of any of the arguments contain the anchor
   character, for example if an argument is an empty
   <code>Set</code>. The spurious calls to
   <code>MessageFormatter.format()</code> were removed fixing <a
   href="https://jira.qos.ch/browse/SLF4J-421">SLF4J-421</a> and <a
   href="https://jira.qos.ch/browse/SLF4J-287">SLF4J-287</a>.</p>

   <p>&bull; The implementations of the
   <code>MDCAdapter.setContextMap()</code> methods shipping with SLF4J
   now cater for a null argument. This fixes <a
   href="https://jira.qos.ch/browse/SLF4J-414">SLF4J-414</a>. Both
   Alexei Orischenko and Kengo TODA kindly provided PRs for this
   issue.</p>

   
   
   
   <h3>18th of June, 2021 - Release of SLF4J 1.7.31</h3>

   <p>In the jcl-over-slf4j module avoid <code>Object</code> to
   <code>String</code> conversion. This issue was reported in <a
   href="https://jira.qos.ch/browse/SLF4J-497">SLF4J-497</a> by Antonio
   Tomac who also provided the relevant PR.</p>
 
   <p>In the log4j-over-slf4j module added empty constructors for
   ConsoleAppender. This fixes <a
   href="https://jira.qos.ch/browse/SLF4J-514">SLF4J-514</a> as
   requested by Simon F (bratkartoffel).

   
   <hr noshade="noshade" size="1"/>

   <h3>16th of December, 2019 - Release of SLF4J 1.7.30</h3>

   <p>Fixed a memory leak in case of no provided binding and
   multi-threaded initialization as described in <a
   href="https://jira.qos.ch/browse/SLF4J-469">SLF4J-469</a>. Many
   thanks to David Harsha to providing the relevant PR.</p>
   
   <hr noshade="noshade" size="1"/>

   <h3>31st of October, 2019 - Release of SLF4J 1.7.29</h3>

   <p>In the pom file for <em>jcl-over-slf4j</em> module, the Apache
   license is now explicitly mentioned. In previous versions, the
   Apache license for the <em>jcl-over-slf4j</em> was mentioned in
   java source code and the LICENSE.txt file. </p>
   
   <hr noshade="noshade" size="1"/>

   <h3>October 1st, 2019  - Release of SLF4J 2.0.0-alpha1</h3>

   <p class="highlight">The the 2.0.x series requires Java&nbsp;8 and
   adds a backward-compatible <a
   href="manual.html#fluent">fluent logging api</a>.
   <br/>   <br/>
   Moreover, SLF4J has been modularized per <a
   href="http://openjdk.java.net/projects/jigsaw/spec/">JPMS/Jigsaw</a>
   specificaton. The resulting internal changes are <a class="big
   bold" href="faq.html#changesInVersion18">detailed</a> in the FAQ
   page.
   </p>

   <p>SLF4J version 2.0.0 requires Java 8. It builds upon the 1.8.x
   series and adds a backward-compatible <a
   href="manual.html#fluent">fluent logging api</a>.  By
   backward-compatible, we mean that existing logging frameworks do
   not have to be changed for the user to benefit from the fluent
   logging API.
   </p>

   
   <p>&bull; Refactored the fluent-api in
   <code>org.slf4j.Logger</code> interface to ease the work required
   by downstream implementations.
   </p>

   <p>&bull; <em>By default</em>, when using the fluent-API
   <code>org.slf4j.Logger</code> will merge into the message part any
   marker and key-value data passed to it. Non default implementation
   are encouraged to implement a more customizable behavior.</p>

   <p>&bull; Fix the double back-end initializatoin problem reported
   in <a href="https://jira.qos.ch/browse/SLF4J-463">SLF4J-463</a> by
   Dan Groves who also provided a test-case to reptoduce the problem
   and a relevant fix.
   </p>

   <p>&bull; Fixed incorrect handling of <code>Throwable</code> as
   last parameter in <a
   href="https://jira.qos.ch/browse/SLF4J-466">SLF4J-466</a>.
   </p>

   
   <hr noshade="noshade" size="1"/>

   <h3>10th of August, 2019 - Release of SLF4J 1.7.28</h3>

   <p>&bull; Added <code>Automatic-Module-Name</code> in
   <em>MANIFEST.MF</em> files in various SLF4J artifacts. This fixes
   <a href="https://jira.qos.ch/browse/SLF4J-420">SLF4J-420</a> as
   reported by Gael Lalire.</p>

   <p>The module names to JMPS automatic module name mappings are
   listed in the table below.</p>

   <table class="bodyTable striped" >
     <tr >
       <th>Maven artifact/module</th>
       <th>JMPS module name</th>
     </tr>
     <tr>
       <td>slf4j-api</td>
       <td>org.slf4j</td>
     </tr>
     <tr>
       <td>slf4j-jdk14</td>
       <td>org.slf4j.jul</td>
     </tr>
     <tr>
       <td>slf4j-nop</td>
       <td>org.slf4j.nop</td>
     </tr>
     <tr><td>slf4j-simple</td>
     <td>org.slf4j.simple</td>
     </tr>
     <tr>
       <td>jcl-over-slf4j</td>
       <td>org.apache.commons.logging</td>
     </tr>
     <tr>
       <td>log4j-over-slf4j</td>
       <td>org.apache.log4j</td>
     </tr>
   </table>

   <p>&bull; Fixed incorrect use of <code>TRACE</code> level in one of
   the <code>debug()</code> printing methods in
   <code>EventRecodingLogger</code> class. This corrects <a
   href="https://jira.qos.ch/browse/SLF4J-460">SLF4J-460</a> as
   reporeted by Kevin Goveia.
   </p>


   <hr noshade="noshade" size="1"/>

   <h3>6th of August, 2019 - Release of SLF4J 1.7.27</h3>


   <p>This version had the incorrect "Automatic-Module-Name" for the
   <code>log4j-over-slf4j</code> artifact. Please use version 1.7.28
   or later which contain correct automatic module names.</p>
   
   
   <hr noshade="noshade" size="1"/>

   <h3>13th of June, 2019  - Release of SLF4J 2.0.0-alpha0</h3>

   <p class="highlight">The the 2.0.x series requires Java&nbsp;8 and
   adds a backward-compatible <a
   href="manual.html#fluent">fluent logging api</a>.</p>
   
   <p>SLF4J version 2.0.0 requires Java 8. It builds on the 1.8.x
   series and adds a backward-compatible <a
   href="manual.html#fluent">fluent logging api</a>.  By backward-compatible,
   we mean that existing logging frameworks do not have to be changed
   for the user to benefit from the fluent logging API.
   </p>


   
   <hr noshade="noshade" size="1"/>

   <h3>2019 - Release of SLF4J 1.8.0-beta5</h3>

   <p>Fixed ignored Throwable issue in log4j-over-slf4j as reported in
   <a href="https://jira.qos.ch/browse/SLF4J-233">SLF4J-233</a> by
   John Vasileff.</p>

   <p>In all relevant <em>MANIFEST.MF</em> files set the
   <code>Bundle-RequiredExecutionEnvironment</code> directive to
   <code>JavaSE-1.6</code>. This fixes <a
   href="https://jira.qos.ch/browse/SLF4J-449">SLF4J-449</a> as
   reported by  Larissa Smirnova.</p>

   <p><code>JDK14LoggerAdapter</code> is now aware of being enclosed
   in a <code>SubstituteLogger</code> and computes caller data
   accordingly. This fixes <a
   href="https://jira.qos.ch/browse/SLF4J-445">SLF4J-445</a> reported
   by Alexander Yevsyukov.
   </p>
   
   <p>In the slf4j-ext package, marked the ch.qos.cal10n package as
   optional. This fixes <a
   href="https://jira.qos.ch/browse/SLF4J-439">SLF4J-439</a> reported
   by Mike Mansell.</p>
   
   <hr noshade="noshade" size="1"/>
   
   <h3>February 19th, 2019 - Release of SLF4J 1.8.0-beta4</h3>

   <p class="highlight"t>In the 1.8.x series, SLF4J has been
   modularized per <a
   href="http://openjdk.java.net/projects/jigsaw/spec/">JPMS/Jigsaw</a>
   specificaton. The resulting internal changes are <a class="big
   bold" href="faq.html#changesInVersion18">detailed</a> in the FAQ
   page. </p>

   <p class="highlight">The the 1.8.x series requires Java&nbsp;6 or
   later as slf4j-api now relies on the <code>ServiceLoader</code>
   mechanism to find its logging backend. <code>ServiceLoader</code>
   is available in <b>Java 6</b> and later.</p>
   
   <p>In the 1.8.x series, SLF4J has been modularized
   per <a href="http://openjdk.java.net/projects/jigsaw/spec/">JPMS/Jigsaw</a>
   specificaton. The resulting internal changes are <a class="big
   bold" href="faq.html#changesInVersion18">detailed</a> in the FAQ
   page. Moreover, SLF4J now requires Java&nbsp;6 or later as
   slf4j-api now relies on
   the <a href="https://docs.oracle.com/javase/8/docs/api/java/util/ServiceLoader.html">ServiceLoader</a>
   mechanism to find its logging backend. <code>ServiceLoader</code>
   is available in Java 6 and later.</p>

   <p><code>SLF4JBridgeHandler</code> now correctly handles null
   messages. This fixes <a
   href="https://jira.qos.ch/browse/SLF4J-99">SLF4J-99</a> (again) and
   <a href="https://jira.qos.ch/browse/SLF4J-409">SLF4J-409</a> as
   reported by Devin Smith.</p>

   <p>For reasons of coherency, the
   <em>Automatic-Automatic-Module-Name</em> for the jul-to-slf4j
   module is now "jul.to.slf4j". In the earlier versions of Java 9 the
   string "to" within "jul.to.slf4j" was incorrectly interpreted as a
   reserved keyword. This bug has been fixed in later versions of the
   JDK, in particular JDK 11.
   </p>

   <p>SLF4J modules are now <a
   href="http://openjdk.java.net/jeps/238">multi-release jar</a>
   files.  This fixes compatibility issues in certain legacy
   environments, as described for example in <a
   href="https://jira.qos.ch/browse/SLF4J-456">SLF4J-456</a>.
   
   <p>Fixed <a
   href="https://nvd.nist.gov/vuln/detail/CVE-2018-8088">CVE-2018-8088</a>
   by removing the <code>EventData</code> <code>EventException</code>
   <code>EventLogger</code> classes in the same way as done in SLF4J
   1.7.26.
   </p>

   <p>Removed <code>MDCStrLookup</code> class in
   <code>org.slf4j.ext</code> package which relied on
   <code>commons-lang</code>. Thus, <code>slf4j-ext</code> module no
   longer depends on <code>commons-lang</code> fixing <a
   href="https://jira.qos.ch/browse/SLF4J-454">SLF4J-454</a>.

   
   <h3>February 16th, 2019 - Release of SLF4J 1.7.26</h3>

   <p>Due to popular demand in relation to <a
   href="https://nvd.nist.gov/vuln/detail/CVE-2018-8088">CVE-2018-8088</a>,
   <code>EventData</code>, <code>EventException</code> and
   <code>EventLogger</code> classes were removed from the
   <code>org.slf4j.ext</code> package located in the
   <code>slf4j-ext</code> module.
   </p>
   
   <p>The aforementioned vulnerabilty has a low severty but was
   incorrectly marked critical in the National Vulnerability Database.
   </p>

   
   <hr noshade="noshade" size="1"/> 
   
   <h3>21st of March, 2018 - Release of SLF4J 1.8.0-beta2</h3>
   

   <p>Automatic module name for the artifact <em>jul-to-slf4j.jar</em>
   is jul.to.slf4j. However, <b>to</b> is a reserved keyword within
   ModuleDeclaration and ModuleDirective productions (Java 9). By
   declaring the following in MANIFEST file of said artifact we avoid
   this problem. </p>
   
   <p class="source">Automatic-Module-Name: <b>jul_to_slf4j</b></p>

   <p>In later versions of Java 9 this problem was fixed and we
   reverted to <b>jul.to.slf4j</b> in 1.8.0-beta3 and later.</p>
   
   <p>See also <a
   href="https://jira.qos.ch/browse/SLF4J-428">SLF4J-428</a>.</p>

   <p>Fix incorrect use of log levels in
   <code>EventRecodingLogger</code>. This fixes <a
   href="https://jira.qos.ch/browse/SLF4J-411">SLF4J-411</a> reported
   by Doug Roper.</p>
   
   <p>The class <code>org.slf4j.ext.EventData</code> is now marked as
   deprecated in preparation for its removal due to a security
   vulnerability. In subsequent releases this class well be removed
   without replacement. See
   also <a href="https://jira.qos.ch/browse/SLF4J-430">SLF4J-430</a>
   and <a href="https://jira.qos.ch/browse/SLF4J-431">SLF4J-431</a>.</p>
  
   
   <h3>January 30th, 2018 - Release of SLF4J 1.8.0-beta1</h3>
   
   <p>Fix Travis build issues as reported in <a
   href="https://jira.qos.ch/browse/SLF4J-427">SLF4J-427</a> by 
   Brett Randall who also provided the releavant PR.</p>
   
   <p>Added a <code>createdPostInitialization</code> final public
   variable in SubstituteLogger.</p>

   <p>Fixed typo in <code>SubstituteServiceProvider</code> class
   name. See also <a
   href="https://jira.qos.ch/browse/SLF4J-426">SLF4J-426</a>.</p>
   
   <p>Updated slf4j-api module's MANIFEST.MF file
   "Bundle-RequiredExecutionEnvironment" entry value to J2SE-1.6.
   </p>

   
   
   <hr noshade="noshade" size="1"/>

   <h3>October 20th, 2017 - Release of SLF4J 1.8.0-beta0</h3>

   <p>Given that the same package name in different modules is a
   showstopper in Java 9, the <code>org.slf4j.impl</code> package has
   been removed from all slf4j modules. In other words starting with
   slf4j 1.8.0-beta0 "providers" will no longer act as 1.7.x/1.6.x
   "bindings". See the <a class="big bold"
   href="faq.html#changesInVersion18">relevant FAQ</a> entry for
   details.</p>

   <p>

   
   <hr noshade="noshade" size="1"/>

   <h3>April 25th, 2017 - Release of SLF4J 1.8.0-alpha2</h3>

   <p>The JPMS module names for <code>log4j-over-slf4j</code> and
   <code>jcl-over-slf4j</code> are now based on the names of the
   artifacts they are intended to replace, respectively log4j v1 and
   commons-logging with the presumed module names "log4j" and
   "org.apache.commons.logging". This fixes <a
   href="https://jira.qos.ch/browse/SLF4J-408">SLF4J-408</a> reported
   by Stephen Colebourne.
   </p>

   <p>Removed unnecessary export of org.slf4j.jul package in
   module-info.jar of <code>slf4j-jdk14</code> artifact. This issue
   has been reported in <a
   href="https://jira.qos.ch/browse/SLF4J-407">SLF4J-407</a> by
   Stephen Colebourne.
   </p>
   
   
   <hr noshade="noshade" size="1"/>

   <h3>April 13th, 2017 - Release of SLF4J 1.8.0-alpha1</h3>

   <p>Removed spurious System.out.println in the slf4j-log4j12
   module. See <a
   href="https://jira.qos.ch/browse/SLF4J-406">SLF4J-406</a> for
   details.</p>
   
   <hr noshade="noshade" size="1"/>

   <h3>April 7th, 2017 - Release of SLF4J 1.8.0-alpha0</h3>

   <p>SLF4J has been modularized per <a
   href="http://openjdk.java.net/projects/jigsaw/spec/">JPMS/Jigsaw</a>
   specificaton. The resulting internal changes are <a class="big bold"
   href="faq.html#changesInVersion18">detailed</a> in the FAQ
   page.</p>
 
   
   <p>Due to the lack of interest, slf4j-android and slf4j-jcl modules
   have been dropped with no replacement.</p>
   
   <hr noshade="noshade" size="1"/>

   <h3>March 16th, 2017 - Release of SLF4J 1.7.25</h3>

   <p>In slf4j-simple module, added a configuration option to
   enable/disable caching of the System.out/err target. This
   enhancement was requested in <a
   href="https://jira.qos.ch/browse/SLF4J-395">SLF4J-395</a> by
   Herv&eacute; Boutemy.
   </p>

   <p>Refactored several internal methods in <code>SimpleLogger</code>
   in order to ease its extension.  This enhancement was requested in
   <a href="https://jira.qos.ch/browse/SLF4J-394">SLF4J-394</a> by
   Herv&eacute; Boutemy.</p>

   <p>Updates the <code>serialVersionId</code> of
   <code>BasicMarker</code> in order to ease diagnosis of
   serialization issues with this class.
   </p>

   <hr noshade="noshade" size="1"/>

   <h3>February 23rd, 2017 - Release of SLF4J 1.7.24</h3>

   <p>In its MANIFEST.MF file, the jcl-over-slf4j module now declares
   exporting <code>org.apache.commons.logging</code> version "1.2"
   instead of version "1.1.1". Otherwise, no java code has
   changed. The change was requested in <a
   href="https://jira.qos.ch/browse/SLF4J-383">SLF4J-383</a> reported
   by Florian Kolbe and only affects OSGi environments.
   </p>

   <p>Fix performance bottleneck in <code>BasicMarker</code> which now
   uses a <code>CopyOnWriteArray</code> instead of a
   <code>Vector</code>. This problem was raised in <a
   href="https://jira.qos.ch/browse/SLF4J-240">SLF4J-240</a> by Ralph
   Goers.</p>

   <p>CAL10N is now declared as an optional dependency of
   slf4j-ext. This fixes <a
   href="https://jira.qos.ch/browse/SLF4J-369">SLF4J-369</a> reported
   by Matej Spiller-Muys.
   </p>

   <hr noshade="noshade" size="1"/>

   <h3>February 15th, 2017 - Release of SLF4J 1.7.23</h3>

   <p class="highlight">Update to SLF4J version 1.7.23 to enable
   slf4j-log4j12 to run under Java 9.</p>


   <p>When running under Java 9, log4j version 1.2.x is unable to
   correctly parse the "java.version" system property. Assuming an
   inccorect Java version, it proceeded to disable its MDC
   functionality. The slf4j-log4j12 module shipping in this release
   fixes the issue by tweaking MDC internals by reflection, allowing
   log4j to run under Java 9. See also <a
   href="https://jira.qos.ch/browse/SLF4J-393">SLF4J-393</a>.</p>

   <p>Fixed issue <code>EventRecodingLogger</code> not saving marker
   data in the event. This issue was reported in <a
   href="http://jira.qos.ch/browse/SLF4J-379">SLF4J-379</a> by Manish
   Soni with Jonas Neukomm providing the relevant PR.
   </p>

   <p>The slf4j-simple module now uses the latest reference to
   System.out or System.err. In previous releases the reference was
   set at the beginning and re-used. This change fixes <a
   href="https://jira.qos.ch/browse/SLF4J-389">SLF4J-389</a> reported
   by Igor Polevoy.</p>

   <hr noshade="noshade" size="1"/>

   <h3>December 13th, 2016 - Release of SLF4J 1.7.22</h3>

   <p>Add support for OFF level in <code>SimpleLogger</code>. This
   feature was requested in <a
   href="http://jira.qos.ch/browse/SLF4J-332">SLF4J-332</a>.
   </p>
   
   <p>Allow re-initialization of <code>SimpleLogger</code> by
   "friends". This change was requested in <a
   href="http://jira.qos.ch/browse/SLF4J-370">SLF4J-370</a> by
   Christian Schulte.
   </p>


   <hr noshade="noshade" size="1"/>

   <h3>April 4th, 2016 - Release of SLF4J 1.7.21</h3>

   <p>Fixed a memory leak due to a race-condition occurring during
   SLF4J initialization. In that case, some
   <code>SubstituteLogger</code> instances may continue to accumulate
   log events until the JVM eventually runs out of memory. This issue
   was reported in <a
   href="http://jira.qos.ch/browse/SLF4J-364">SLF4J-364</a> by Jeff
   Flanigan.</p>

   <p><code>LoggerFactory</code> makes sure to release all resources
   referenced by <code>SubstituteLoggerFactory</code>
   post-initialization. See also <a
   href="http://jira.qos.ch/browse/SLF4J-366">SLF4J-366</a>
   </p>

   <hr noshade="noshade" size="1"/>

   <h3>March 29th, 2016 - Release of SLF4J 1.7.20</h3>

   <p class="red">Releases 1.7.19 and 1.7.20 suffer from a <a
   href="http://jira.qos.ch/browse/SLF4J-364">memory leak</a>. Please
   use version 1.7.21 or later instead.</p>

   <p>Fixed initialization problem encountered on the Google App
   Engine platform with SLF4J version 1.7.19 but not other versions.
   The problem was reported in <a
   href="http://jira.qos.ch/browse/SLF4J-363">SLF4J-363</a> by Osvaldo
   Pinali Doederlein.
   </p>


   <hr noshade="noshade" size="1"/>

   <h3>March 14th, 2016 - Release of SLF4J 1.7.19</h3>

   <p class="red">Releases 1.7.19 and 1.7.20 suffer from a <a
   href="http://jira.qos.ch/browse/SLF4J-364">memory leak</a>. Please
   use version 1.7.21 or later instead.</p>

   <p>Fixed <code>NullPointerException</code> thrown by
   org.slf4j.helpers.SubstituteLogger.isDelegateEventAware(SubstituteLogger.java:353). This
   issue was reported by Jeffrey Zhao in <a
   href="http://jira.qos.ch/browse/SLF4J-361">SLF4J-361</a>.</p>

   <p>Initialization of the slf4j-log4j12 module is now thread safe
   fixing <a href="http://jira.qos.ch/browse/SLF4J-358">SLF4J-358</a>.
   </p>

   <p>Initialization of the slf4j-jdk14 module is now thread safe
   fixing <a href="http://jira.qos.ch/browse/SLF4J-359">SLF4J-359</a>.
   </p>


   <hr noshade="noshade" size="1"/>

   <h3>26th of February, 2016 - Release of SLF4J 1.7.18</h3>

   <p>Initialization of the slf4j-simple module is now thread safe
   fixing <a href="http://jira.qos.ch/browse/SLF4J-356">SLF4J-356</a>.
   </p>

   <p>Fixed Import-Package statement in MANIFEST.MF for the
   slf4j-log4j12 module. This isssue was reported by Mathieu Sebire in
   <a href="jira.qos.ch/browse/SLF4J-357">SLF4J-357</a> who also
   provided the relevant pull request.
   </p>

   <hr noshade="noshade" size="1"/>

   <h3>19th of February, 2016 - Release of SLF4J 1.7.17</h3>

   <p>When running under Android, skip binding ambiguity check during
   initialization for better performance. The fix introduced in version 1.7.14
   was not effective.
   </p>

   <hr noshade="noshade" size="1"/>

   <h3>11th of February, 2016 - Release of SLF4J 1.7.16</h3>

   <p>The <code>MANIFEST.MF</code> file in slf4j-api.jar module was
   missing an export statement for the <em>org.slf4j.event</em>
   package. <code>MANIFEST.MF</code> files in other modules were
   missing the mirroring import statements.
   </p>
   
   <hr noshade="noshade" size="1"/>

   <h3>9th of February, 2016 - Release of SLF4J 1.7.15</h3>

   <p>In previous versions of SLF4J, if the application was already
   multi-threaded at the time the first SLF4J logger was created, logs
   made during the SLF4J initialization phase were lost. New code
   added in relation with <a
   href="http://jira.qos.ch/browse/SLF4J-353">SLF4J-353</a> fixes this
   problem by storing and replaying logging calls made during
   initialization.
   </p>

   <hr noshade="noshade" size="1"/>

   <h3>24th of January, 2016 - Release of SLF4J 1.7.14</h3>

   <p>The assignment of the INITIALIZATION_STATE variable in
   <code>LoggerFactory</code> is now guaranteed to be consistent for
   multi-thread initializations. More specifically, only one thread
   will see INITIALIZATION_STATE as UNINITIALIZED with all other
   threads observing either ONGOING_INITIALIZATION or the final result
   of the initialization. However, SLF4J initialization is still
   non-blocking and re-entrant, in the sense that if some thread tries
   to obtain loggers during ongoing initialization by another (or
   same) thread, instances of <code>SubstituteLogger</code> are
   returned.  This fixes <a
   href="http://jira.qos.ch/browse/SLF4J-167">SLF4J-167</a>. 
   </p>


   <p>Moved delegation check loop from <em>log4j-over-slf4j.jar</em>
   to <em>slf4j-log4j12.jar</em> for better targeted loop checks.  The
   rationale behind the change is explained by Frans Orsel in <a
   href="http://jira.qos.ch/browse/SLF4J-345">SLF4J-345</a> who also
   provided the relevant pull request.
   </p>

   <p>During initialization the binding ambiguity check is skipped
   under Android in order to improve performance. This change was
   requested by Nitin Verma in <a
   href="http://jira.qos.ch/browse/SLF4J-328">SLF4J-328</a> who also
   provided the relevant patch.
   </p>

   <p>The <code>StaticMarkerBinder</code> and
   <code>StaticMDCBinder</code> classes shipping in various SLF4J
   bindings now offer a <code>getSingletion()</code> method. The
   <code>org.slf4j.MDC</code> and <code>MarkerFactory</code> classes
   now perform binding by invoking the <code>getSingleton()</code>
   method first and if in the presence of an older version of SLF4J
   with said method missing, then by accessing the SINGLETON
   field. This backward compatible change was requested by Rufus
   Alexander in <a
   href="http://jira.qos.ch/browse/SLF4J-347">SLF4J-347</a> in order
   to implement an SLF4J binding in Clojure, namely <a
   href="https://github.com/fzakaria/slf4j-timbre">slf4j-timbre</a>.
   </p>

   <p>Fix the OSGI <code>Bundle-Version</code> property in the
   <em>MANIFEST.MF</em> of osgi-over-slf4j module. This issue was
   reported by Antoine Dessaigne in <a
   href="http://jira.qos.ch/browse/SLF4J-341">SLF4J-341</a>.
   </p>

   <hr noshade="noshade" size="1"/>

   <h3>10th of November, 2015 - Release of SLF4J 1.7.13</h3>


   <p>Fixed <code>LoggerFactory</code> initialisation problem in
   presence of SecurityManager denying "createSecurityManager" runtime
   permission. See <a
   href="http://jira.qos.ch/browse/SLF4J-324">SLF4J-324</a> for
   further details.
   </p>

   <p>Fixed issue with <code>BasicMDCAdapter</code> leaking MDC
   information to non-child threads. This problem was reported by
   Lukasz Cwik in <a
   href="http://jira.qos.ch/browse/SLF4J-316">SLF4J-316</a> who also
   provided the relavant pull request.
   </p>
   
   <p>More robust handling of ill-formatted input strings by
   SLF4JBridgeHandler. This issue was reported in <a
   href="http://jira.qos.ch/browse/SLF4J-337">SLF4J-337</a> by Rodolfo
   Udo Labsch.
   </p>

   <p>House cleaning of our project's Maven <em>pom.xml</em> files, an
   initiative undertaken by Jeremy Landis.
   </p>

   <p>Added <code>getAdditivity()</code> method method in
   <code>Category</code> class in the log4j-over-slf4j module. This
   addition was requested by Milo Felipe <a
   href="http://jira.qos.ch/browse/SLF4J-309">SLF4J-309</a> with
   Dimitrios Liapis providing the relavant pull request.
   </p>

   <p>Added the <code>assertLog(boolean, String)</code> method in the
   <code>Category</code> class, in module log4j-over-slf4j.</p>

   <p>In the log4j-over-slf4j module, removed misplaced Layout.java
   file. This issue was reported in <a
   href="http://jira.qos.ch/browse/SLF4J-218">SLF4J-218</a> by Joshua
   M Steward with Alfredo Ramos providing the relavant pull request.
   </p>
  
   <hr noshade="noshade" size="1"/>

   <h3>March 26th, 2015 - Release of SLF4J 1.7.12</h3>

   <p>All java files have been reformatted to with the code formatter
   style defined in <i>codeStyle.xml</i>. This style uses 4 spaces for
   indentation and a maximum line width of 160.</p>

   <p>As SLF4J requires JDK 1.5 or later, the
   <code>Bundle-RequiredExecutionEnvironment</code> declaration in the
   various MANIFEST files have been updated to J2SE-1.5.
   </p>

   <p>Added missing Bundle-ManifestVersion attribute in the MANIFEST
   files in log4j-over-slf4j. The issue was raised in <a
   href="http://jira.qos.ch/browse/SLF4J-321">SLF4J-231</a> by Nikolas
   Falco who also provided the the appropriate pull request. </p>

   <p>Added <code>getAppender(String)</code> method in
   <code>Category</code> class in the log4j-over-slf4j module. This
   addition was requested by Ramon Gordillo in <a
   href="http://jira.qos.ch/browse/SLF4J-319">SLF4J-319</a>.
   </p>

   <p>Added <code>setThreshold</code> method in
   <code>AppenderSkeleton</code> class in the log4j-over-slf4j
   module. This addition was requested by Dimitrios Liapis who also
   provided the appropriate pull request.
   </p>

   <p>Added <code>getParent</code> method in <code>Category</code>
   class in the log4j-over-slf4j module. This addition was requested
   by Himanshu Bhardwaj in <a
   href="http://jira.qos.ch/browse/SLF4J-318">SLF4J-318</a>.
   </p>

   <hr noshade="noshade" size="1"/>

   <h3>6th of January, 2015 - Release of SLF4J 1.7.10</h3>

   <p>The <code>MDC.putCloseable</code> method now explicitly returns
   <code>MDC.MDCloseable</code> instead of the more generic
   <code>java.io.Closeable</code>. This in turn allows one to write
   try-with-resources statement without a catch clause. Many thanks to
   William Delanoue for proposing this change.</p>

   <p>The various constructors in <code>FileAppender</code> in the
   log4j-over-slf4j module are now public.
   </p>

   <hr noshade="noshade" size="1"/>

   <h3>16th of December, 2014 - Release of SLF4J 1.7.9</h3>

   <p class="highlight"><a href="codes.html#loggerNameMismatch">Spot
   incorrectly named loggers</a> by setting the
   <code>slf4j.detectLoggerNameMismatch</code> system property to
   true.</p>

   <p><a href="codes.html#loggerNameMismatch">Spot incorrectly named
   loggers</a> by setting the
   <code>slf4j.detectLoggerNameMismatch</code> system property to
   true.  This significant feature was contributed by Alexander
   Dorokhine.</p>

   <p>Added <code>MDC.putCloseable</code> method so that it can be
   used as a <a
   href="https://docs.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html">closeable
   resource</a> under Java 7.</p>

   <p>Added <code>getContext</code> method returning a hashtable in
   org.apache.log4j.MDC in the log4j-over-slf4j module.
   </p>

   <p>The introduction of the @Nonnull JSR 305 annotation in SLF4J
   version 1.7.8 causes the Scala compiler to fail. This is issue has
   been documented in <a
   href="https://issues.scala-lang.org/browse/SI-5420">SI-5420</a>. Given
   that many Scala users will be affected by this issue for the
   foreseeable future, we have decided to renounce the user of JSR 305
   annotations in SLF4J for the time being.
	 </p>

   <p>Numerous small code improvements too minor to be listed
   here.</p>

   <hr noshade="noshade" size="1"/>

   <h3>4th of April, 2014 - Release of SLF4J 1.7.7 </h3>

   <p>SFL4J API now uses generics. This enhancement was contributed by
   Otavio Garcia. Due to erasure of generics in Java, the changes are
   backward-compatible.</p>

   <p>The slf4j-migrator can now convert statements using the long deprecated 
   <code>Category</code> class.</p>

   <p>Added the <code>SimpleLayout</code> and
   <code>FileAppender</code> classes to the log4j-over-slf4j
   module.</p>


   <h3>February 5th, 2014 - Release of SLF4J 1.7.6</h3>

   <p>Added slf4j-android module to the slf4j distribution. This
   module is contributed by Andrey Korzhevskiy.</p>

   <p>Loggers created during the initialization phase are no longer
   <code>NOPLoggers</code> which drop all logging calls. Instead,
   SLF4J now creates substitute loggers which delegate to the
   appropriate logger implementation after the initilization phase
   completes. Only calls made to these loggers during the
   initialization phase are dropped. This enhacement was proposed in
   <a href="http://jira.qos.ch/browse/SLF4J-302">SLF4J-302</a>
   by Chetan Mehrotra.
   </p>

   <p>Improvements to the <code>exit()</code> and
   <code>throwing()</code> methods in <code>XLogger</code>. This
   enhacement was requested in <a
   href="http://jira.qos.ch/browse/SLF4J-188">SLF4J-188</a>.
   </p>
   
   <p>Concunrrency improvement in <code>MessageFormatter</code>. This
   improvement was contributed by Vivek Pathak in a <a
   href="https://github.com/qos-ch/slf4j/pull/52">pull
   request</a>.</p>

   <p>Concunrrency improvement in
   <code>BasicMarkerFactory</code>. This improvement was contributed
   by Mikhail Mazursky in a <a
   href="https://github.com/qos-ch/slf4j/pull/40">pull
   request</a>.</p>

   <p><code>JCLLoggerAdapter</code> was incorrectly invoking
   <code>isDebugEnabled</code> calls in its <code>trace()</code>
   methods. This issue was reported in <a
   href="http://jira.qos.ch/browse/SLF4J-272">SLF4J-272</a>.

   </p>

   <p>In the log4j-over-slf4j module, the <code>setLevel</code> method
   in the <code>Category</code> class. This fixes <a
   href="http://jira.qos.ch/browse/SLF4J-270">SLF4J-270</a>. Alfredo
   Ramos provied the relevant patch.
   </p>

   <p>In the log4j-over-slf4j module, added empty implementations for
   <code>OptionHander</code>, <code>WriterAppender</code>,
   <code>ConsoleAppender</code> and <code>AppenderSkeleton</code>
   classes.
   </p>

   <hr noshade="noshade" size="1"/>

   <h3>25th of March, 2013 - Release of SLF4J 1.7.5</h3>

   <p class="highlight">Given the significance of these performance
   improvements, users are highly encouraged to migrate to SLF4J
   version 1.7.5 or later. </p>

   <p><span class="label notice">performance improvements</span> The
   logger factories in most SLF4J modules namely in jcl-over-slf4j,
   log4j-over-slf4j, slf4j-jcl, slf4j-jdk14, slf4j-log4j12, and
   slf4j-simple now use a <code>ConcurrentHashMap</code> instead of a
   regular <code>HashMap</code> to cache logger instances. This change
   significantly improves logger retrieval times at the cost of some
   memory overhead. This improvement was requested in <a
   href="http://jira.qos.ch/browse/SLF4J-289">SLF4J-289</a>
   by Taras Tielkes who also provided the relevant patch.
   </p>
   

   <hr noshade="noshade" size="1"/>

   <h3>18th of March, 2013 - Release of SLF4J 1.7.4</h3>

   <p>Added a package private <code>reset()</code> method to
   <code>SimpleLoggerFactory</code> for testing purposes.</p>

   <hr noshade="noshade" size="1"/>

   <h3>15th of March, 2013 - Release of SLF4J 1.7.3</h3>

   <p>The jul-to-slf4j bridge now correctly handles cases where the
   message string contains {}-placeholders but has no or zero
   parameters. This fixes <a
   href="http://jira.qos.ch/browse/SLF4J-203">SLF4J-203</a>. The
   relevant patch was provided by Matthew Preston in a git pull
   request.</p>
   
   <p>Added missing methods and classes in log4j-over-slf4j module for
   Velocity compatibility.  This issue was reported in <a
   href="http://jira.qos.ch/browse/SLF4J-271">SLF4J-271</a> by
   Thomas Mortagne.</p>

   <hr noshade="noshade" size="1"/>

   <h3>11th of October, 2012 - Release of SLF4J 1.7.2</h3>

   <p>Added osgi-over-slf4j module which serves as an OSGi LogService
   implementation delegating to slf4j. This module is maintained by
   Matt Bishop and Libor Jelinek.</p>

   <p> Christian Trutz added missing PatternLayout class as well as
   several methods in the <code>Logger</code> and
   <code>Category</code> classes. See commit 442e90ba5785cba9 dated
   September 27th 2012 for details.
   </p>

   <p>Added org.slf4j.simpleLoggerwarnLevelString in slf4j-simple
   module.</p>

   <p>Fixed <a
   href="http://jira.qos.ch/browse/SLF4J-263">SLF4J-263</a>. All
   <code>Logger</code> implementations shipping with SLF4J use
   <code>Object...</code> instead of <code>Object[]</code> to avoid
   compiler warnings.</p>

   

   <hr noshade="noshade" size="1"/>

   <h3>14th of September, 2012 - Release of SLF4J 1.7.1</h3>

   <p><a
   href="apidocs/org/slf4j/impl/SimpleLogger.html"><code>SimpleLogger</code></a>
   now supports writing to a file. The property names for configuring
   <code>SimpleLogger</code> have been modified to be consistently in
   camel case. More configuration options have been added. In the
   absence of configuration directives, <code>SimpleLogger</code> will
   behave exactly the same as in the past. <b>If you are one of the
   few users configuring <code>SimpleLogger</code> with configuration
   properties, you will need to adapt to the new and more consistent
   property names.</b></p>

   <hr noshade="noshade" size="1"/>

   <h3>6th of September, 2012 - Release of SLF4J 1.7.0</h3>

   <p><span class="bold big green">SLF4J now requires JDK 1.5.</span></p>

   <p>Printing methods in the <a
   href="apidocs/org/slf4j/Logger.html">Logger</a> interface now offers
   variants accepting <a
   href="http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html">varargs</a>
   instead of Object[]. Given that under the hood, the Java compiler
   transforms varargs into an array, this change is totally 100%
   no-ifs-or-buts backward compatible with all existing client
   code. </p>

   <p>The logger field (of type <code>java.util.logging.Logger</code>)
   in <code>JDK14LoggerAdapter</code> is now marked as transient. This
   fixes <a href="http://jira.qos.ch/browse/SLF4J-252">SLF4J-252</a>,
   a serialization problem reported by Thorbj&oslash;rn Ravn
   Andersen.</p>

   <hr noshade="noshade" size="1"/>

   <h3>11th of June, 2012 - Release of SLF4J 1.6.6</h3>

   <p>Source repository has been moved to <a
   href="https://github.com/qos-ch/slf4j">https://github.com/qos-ch/slf4j</a>
   on github.</p>
 
   <p>In case multiple bindings are found on the class path, SLF4J
   will now output the name of the framework/implementation class it
   binds with.</p>

   <p><a
   href="apidocs/org/slf4j/impl/SimpleLogger.html">SimpleLogger</a>
   now supports configuration properties. </p>

   <p>LoggerWrapper in the slf4j-ext module now correctly deals with
   markers. This fixes <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=265">bug #265</a>
   reported by Dario Campagna.</p>

   <p>The log4j-over-slf4j module now supports legacy projects
   providing their own log4j <code>LoggerFactory</code>. This fixes <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=234">bug #234</a>
   reported by Laurent Pellegrino with Piotr Jagielski providing the
   appropriate patch.</p>

   <h3>4th of June, 2012 - Release of SLF4J 1.6.5</h3>

   <p>In the slf4j-log4j12 module, upgraded the log4j dependency to
   version 1.2.17.</p>

   <p>Added removeHandlersForRootLogger() method to <code><a
   href="apidocs/org/slf4j/bridge/SLF4JBridgeHandler.html">SLF4JBridgeHandler</a></code>
   class.</p>

   <p>The log4j-over-slf4j module now exports all its packages in its
   manifest. This issue was reported in <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=262">262</a> by
   Mikhail Mazursky who also provided the relevant patch.
   </p>

   <h3>October 31st, 2011 - Release of SLF4J 1.6.4</h3>

   <p>Fixed in thread-safety issues in <code>BasicMDCAdapter</code>
   fixing <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=203">bug
   #203</a> and <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=224">bug
   #224</a>. Note that <code>BasicMDCAdapter</code> is only used with
   the slf4j-jdk14.jar binding.
   </p>

   <p><code>BasicMDCAdapter</code> invoked a method introduced in JDK
   1.5 preventing it from running under JDK 1.4. Interestingly enough,
   this issue has never been reported by the user community.</p>

   <h3>October 17th, 2011 - Release of SLF4J 1.6.3</h3>

   <p><code>LogEvent</code> class in slf4j-ext module now correctly
   passes the event data as a parameter object. This fixes <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=246">bug #246</a>
   reported by Ralph Goers.
   </p>

   <p>Added missing OSGi manifest to the jul-to-slf4j module. This
   fixes <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=166">bug
   #166</a> reported by Ekkehard Gentz. </p>

   <p>In the log4j-over-slf4j module, added missing
   <code>getAllAppenders</code>() method in <code>Category</code>
   class. This fixes <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=235">bug #235</a>
   reported by Anthony Whitford.
   </p>

   <h3>August 19th, 2011 - Release of SLF4J 1.6.2</h3>

   <p>Fixed <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=138">bug
   #138</a>. SLF4J will no longer complain about multiple SLF4J
   bindings when running under a Weblogic server.
   </p>

   <p>Fixed <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=228">bug
   #228</a>. When running under IBM's JDK, and if no binding can be
   found, SLF4J will no longer throw a
   <code>NoClassDefFoundError</code>. Instead, it will default to an
   NOP implementation. Under the same circumstances but with Sun's
   JDK, SLF4J already defaulted to an NOP implementation since release
   1.6.0.</p>

   <p>Added certain missing classes to the log4j-over-slf4j module as
   requested in <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=225">bug 225</a> by
   Josh Stewart.
   </p>

   <hr noshade="noshade" size="1"/>

   <h3>July 5th, 2010 - Release of SLF4J 1.6.1</h3>

   <p>Updated log4j dependency to version 1.2.16 and <a
   href="http://cal10n.qos.ch/">CAL10N</a> dependency to version
   0.7.4.
   </p>

   <p>Fixed missing versioning OSGi metadata in the log4j-over-slf4j
   module. This problem was reported in <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=187">bug 187</a> by
   David Savage.
   </p>

   

   <hr noshade="noshade" size="1"/>

   <h3>May 8th, 2010 - Release of SLF4J 1.6.0</h3>

   <p>It is expected that <em>all</em> SLF4J releases in the 1.6.x
   series will be mutually compatible.
   </p>

   <p>As of SLF4J version 1.6.0, in the absence of an SLF4J binding,
   slf4j-api will default to a no-operation implementation discarding
   all log requests. Thus, instead of throwing an exception, SLF4J
   will emit a single warning message about the absence of a binding
   and proceed to discard all log requests without further
   protest. See also the <a href="manual.html#libraries">relevant
   section</a> in the user manual.
   </p>

   <p>In the presence of multiple parameters and if the last argument
   in a logging statement is an exception, then SLF4J will now presume
   that the user wants the last argument to be treated as an exception
   and not a simple parameter. See the relevant <a
   href="faq.html#paramException">FAQ entry</a> for further
   details. This fixes <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=70">bug 70</a>
   submitted by Joern Huxhorn who also provided the relevant patch.
   </p>
  
   <p>The <code>log</code> method in <code>LocationAwareLogger</code>
   interface now admits an additional parameter of type
   <code>Object[]</code> representing additional arguments of the log
   request. Due to this modification, slf4j-api version 1.6.x will not
   work with bindings shipping with SLF4J 1.5.x -- bindings shipping
   with 1.6.x must be used.
   </p>


   <p>Fixed <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=150">bug 150</a> by
   implementing missing <code>resetConfiguration()</code> and
   <code>shutdown()</code> methods in <code>LogManager</code> (in
   log4j-over-slf4j) as nop. In addition, the
   <code>getCurrentLoggers()</code> method has been implemented by
   returning an empty enumeration.
   </p>


   <p>Fixed <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=170">bug 170</a> by
   a bare-bones implementation of the <code>NDC</code> class in
   log4j-over-slf4j.</p>

   <p>Fixed <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=175">bug 175</a> by
   synchronizing access to the loggerNameList field.</p>

   <p>Fixed <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=164">bug 164</a>
   observed when SLF4J artifacts were placed under
   java.endorsed.dirs.</p>

   <p>Fixed sub-optimal list type usage in
   <code>SLF4JLogFactory</code> as reported in <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=179">bug 179</a> by
   Sebastian Davids.
   </p>


   <p>Fixed documentation inconsistency in <code>SLF4JLog</code> as
   reported in <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=180">bug 180</a> by
   Sebastian Davids.
   </p>

   
   <hr noshade="noshade" size="1"/>

   <h3>February 25th, 2010 - Release of SLF4J 1.5.11</h3>


  <p>Users yet unfamiliar with SLF4J sometimes unknowingly place both
  <em>log4j-over-slf4j.jar</em> and <em>slf4j-log4j12.jar</em>
  simultaneously on the class path causing stack overflow
  errors. Simultaneously placing both <em>jcl-over-slf4j.jar</em> and
  <em>slf4j-jcl.jar</em> on the class path, is another occurrence of
  the same general problem. As of this version, SLF4J preempts the
  inevitable stack overflow error by throwing an exception with
  details about the actual cause of the problem. This is deemed to be
  better than leaving the user wondering about the reasons of the
  <code>StackOverflowError</code>.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=168">bug
  168</a>. In case log4j-over-slf4j is used and a logback appender
  requires a third party library which depends on log4j, the
  <code>log(String FQCN, Priority p, Object msg, Throwable t)</code>
  method in log4j-over-slf4j's Category class would throw an
  <code>UnsupportedOperationException</code>. Problem reported by Seth
  Call.</p>
  

  <hr noshade="noshade" size="1"/>

  <h3>December 3rd, 2009 - Release of SLF4J 1.5.10</h3>

  <p>SLF4J version 1.5.10 consist of bug fixes and minor
  enhancements. It is totally backward compatible with SLF4J version
  1.5.8. However, the slf4j-ext module ships with a new package called
  <code>org.slf4j.cal10n</code> which adds <a
  href="localization.html">localized/internationalized logging</a>
  support as a thin layer built upon the <a
  href="http://cal10n.qos.ch">CAL10N API</a>.</p>

  <p><a href="http://www.slf4j.org/android/">SLF4J-android</a>,
  maintained by <a
  href="http://dbis.cs.unibas.ch/team/thorsten-moller/dbis_staff_view">Thorsten
  M&ouml;ller</a>, was added as a daughter project of SLF4J.
  </p>

  <p>Added missing "Export-Package" declaration for cal10n in the OSGi
  manifest file for sfl4j-ext. This was requested in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=156">bug 156</a> by
  Pete Muir.</p>

  <p>In log4j-over-slf4j, added missing log(...)  methods as requested
  by Zoltan Szel in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=139">bug report
  139</a>.</p>

  <p>In log4j-over-slf4j, added missing <code>LogManager</code> class
  as requested by Rick Beton in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=150">bug report
  150</a>.</p>

  <p>In the slf4j-ext module, added
  <code>getCopyOfChildTimeInstruments</code> and
  <code>getCopyOfGlobalStopWatch</code> methods to the
  <code>Profiler</code> class. This enables developers to build their
  own output formatters for a given Profiler. This feature was
  requested by David Lindel&ouml;f in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=141">bug 141</a>.
  </p>

  <p>Fixed a <code>NullPointerException</code> occurring in unspecified
  conditions as described in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=146">bug report
  146</a> by Dapeng Ni.</p>

  <p>Added missing OSGi manifest to the <em>log4j-over-slf4j</em>
  module as requested by Wade Poziombka in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=117">bug 117</a>.
  </p>

  <p>OSGi manifests produced by SLF4J now replace the '-' character by
  '.' in compliance with the OSGi specification. This fixes <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=152">bug 152</a>
  according to the patch supplied by Hugues Malphettes.
  </p>

  <p>Fixed packaging issue in jcl104-over-slf4j which inadvertently
  produced a jar file as described in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=151">bug 151</a> by
  Jesse McConnell.</p>




  <hr noshade="noshade" size="1"/>

  <h3>June 11th, 2009 - Release of SLF4J 1.5.8</h3>

  <p>SLF4J version 1.5.8 consist of bug fixes. It is totally backward
  compatible with SLF4J version 1.5.7.</p>

  <p>The Maven pom file for the <code>log4j-over-slf4j</code> module
  contained a compile time dependency on the <code>slf4j-jdk14</code>
  module. The dependency should have been declared in the test
  scope. This problem was reported by Jean-Luc Geering on the slf4j
  user list.
  </p>

  <h3>June 10th, 2009 - Release of SLF4J 1.5.7</h3>

  <p>SLF4J version 1.5.7 consist of bug fixes and minor
  enhancements. It is totally backward compatible with SLF4J version
  1.5.6.</p>

  <p>In SLF4J versions 1.5.5 and 1.5.6, the <code>LoggerFactory</code>
  class which is at the core of SLF4J, if a version compatibility
  issue was detected, accidentally invoked a method which was
  introduced in JDK 1.5. Thus, instead of issuing a clear warning
  message, SLF4J would throw a
  <code>NoClassDefFoundError</code>. Consequently, SLF4J would not run
  with JDK 1.4 and earlier but only if a version incompatibility issue
  was present. For example, if you were mixing
  <em>slf4j-api-1.5.6.jar</em> with <em>slf4j-simple-1.4.2.jar</em>,
  which are mutually incompatible. Please note that this bug affects
  only SLF4J versions 1.5.5 and 1.5.6 <em>and</em> only in the
  presence of incompatible versions of slf4j-api and its binding.
  </p>
  
  <p>SLF4J will now emit a warning if more than one binding is present
  on the class path. This enhancement was proposed in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=132">bug 132</a>
  contributed by by Robert Elliot.
  </p>

  <p>The Log interface implementations in the jcl-over-slf4j module
  will now correctly cope with serialization. This fixes <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=79">bug 79</a>
  reported by Mathias Bogaert. Many thanks to Eric Vargo for precisely
  identifying the problem and supplying the corresponding patch.</p>

  <p>The log4j-over-slf4j module will now correctly
  interact with logging frameworks supporting location information
  such as java.util.logging and logback.  This fixes <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=131">bug 131</a>
  reported by Marc Zampetti.
  </p>

  <p><code>SLF4JBridgeHandler</code> will no longer ignore log records
  with an empty message. This fixes <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=108">bug 108</a>
  reported by Pepijn Van Eeckhoudt and independently by Dan Lewis.
  </p>

  <p>In case the <code>toString()</code> method of a parameter throws
  an exception, <code>MessageFormatter</code> will now print an error
  message, instead of letting the exception bubble higher up as
  previously. This fixes <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=112">bug 112</a>
  submitted by Joern Huxhorn.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>November 21st, 2008 - Release of SLF4J 1.5.6</h3>

  <p>SLF4J version 1.5.6 consists of bug fixes. Users are encouraged
  to upgrade to SLF4J version 1.5.6. The upgrade should pose no
  problems. Nevertheless, you might still want to refer to the SLF4J
  <a href="compatibility.html">compatibility report</a>.
  </p>

  <p>Fixed long standing <a
  href="http://jira.qos.ch/browse/LBCLASSIC-87">LBCLASSIC-87</a> and
  its younger sibling <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=113">bug
  113</a>. With each call to getLogger() method,
  <code>LoggerContext</code> will now retrieve the ILoggerFactory
  afresh from <code>StaticLoggerBinder</code>. This change enables
  context selectors of native implementations, e.g logback, to work
  correctly.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=114">bug
  114</a> reported by Jason Arndt. Corrected the way
  <code>XLogger</code> (in slf4j-ext) passes its fully qualified class
  name so that the underlying logging system can correctly compute
  location information.
  </p>

  
  <p>The <code>install()</code> method of
  <code>SLF4JBridgeHandler</code> will no longer reset the entire
  j.u.l. environment but solely add a <code>SLF4JBridgeHandler</code>
  instance to jul's root logger. By the same token, the
  <code>uninstall()</code> method will remove previously added
  <code>SLF4JBridgeHandler</code> instances without making any other
  modifications to the j.u.l. configuration.
  </p>
  
  <p>Added <code>MDCStrLookup</code> to slf4j-ext. This class can be
  used with Apache Commons Lang's <code>StrSubstitutor</code> class to
  inject values in the SLF4J MDC into strings. Information on
  StrSubstitutor can be found at <a
  href="http://commons.apache.org/lang/api-release/org/apache/commons/lang/text/StrSubstitutor.html">StrSubstitutor
  javadoc</a>.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>October 17th, 2008 - Release of SLF4J 1.5.5</h3>

  <p>The version check mechanism introduced in SLF4J 1.5.4 was
  inconsistent with the large size of SLF4J's installed user base.  We
  cannot expect external SLF4J implementations to align their release
  schedule with that of SLF4J. Consequently, this SLF4J version,
  namely 1.5.5, retains versions checks but as an elective
  process. For further details see the <a
  href="faq.html#version_checks">relevant entry</a> in the FAQ.
  </p>

  <p>You are highly encouraged to upgrade to SLF4J version 1.5.5. The
  upgrade should pose no problems. Nevertheless, you might still want
  to refer to the SLF4J <a href="compatibility.html">compatibility
  report</a>.
  </p>

  <h3>October 16th, 2008 - Release of SLF4J 1.5.4</h3>

  <p>This version corrects critical bugs.
  </p>

  <p>Fixed <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=106">critical bug
  106</a>. In previous versions of SLF4J, if during the initial
  binding phase, the underlying logging system's default configuration
  created or invoked loggers, a <code>NullPointerException</code>
  would be thrown. Refer to the <a
  href="codes.html#substituteLogger">in error codes</a> document for a
  fuller explanation.</p>
  
  <p>At initialization time, LoggerFactory will now check that the
  version of the slf4j-binding matches that of slf4j-api. If there is
  a mismatch a warning will be issued on the console. This should help
  users identify SLF4J related problems more quickly.</p>

  <p>Improvements in documentation as well as fix for <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=102">packaging
  problems</a> related to <em>slf4j-ext</em> module.
  </p>

  <p>SLF4JBridgeHandler (part of jul-to-slf4j) now accounts for
  loggers with resourceBundle as well parameters. This feature
  requested by Darryl Smith in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=98">bug 98</a> and
  by Jarek Gawor in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=103">bug
  103</a>.</p>
  
  <p>We now say that markers contain <em>references</em> to other
  markers. We no longer talk about child markers. The javadocs of the
  <code>Marker</code> interface have been updated to reflect this
  change. Moreover, the <code>hasChildren()</code> method in the
  Marker interface has been deprecated and a new method called
  <code>hasReferences()</code> was added.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>September 12th, 2008 - Release of SLF4J 1.5.3</h3>

  <p>See also the <a href="compatibility.html#1_5_3">compatibility
  report for this version</a>.
  </p>

  <p>Added a new module called slf4j-ext for slf4j-extensions. See <a
  href="extensions.html">its documentation</a> for further
  details.</p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=71">bug
  71</a> which was re-opened by Manfred Geiler. SLF4J loggers now
  survive serialization. By survive serialization, we mean
  that the deserialized logger instance are fully functional. </p>

  <p>The fix for <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=68">bug 68</a> as
  implemented in version 1.5.1 was incomplete. Michael Furman supplied
  a more complete fix which was incorporated in this release.</p>
  
  <p>When slf4j bridges, e.g. jcl-over-slf4j or log4j-over-slf4j, were
  used in conjunction with JUL as the underlying logging system,
  JDK14LoggerAdapter created a LogRecord even for disabled log
  statements. This performance issue was reported in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=90">bug 90</a> by
  Matthew Mastracci.
  </p>

  <p>Added support for array values, including multi-dimensional
  arrays, as parameters. For example,</p>
  <p class="source">log.debug("{} {}", "A", new int[] {1, 2}});</p>
  <p>will print as "A [1, 2]" instead of "A [I@6ca1c" as
  previously. This enhancement was proposed by "lizongbo".
  </p>

  <p>Parameter substitution code has been simplified. SLF4J now only
  cares about the "{}" formatting anchor, that is the '{' character
  immediately followed by '}'. Previously, the '{' had meaning on its
  own. As a result of this change, users no longer need to escape the
  '{' unless it is immediately followed by '}'. Existing messages
  which escaped standalone '{' character will be printed with a
  preceding backslash. However, no data loss in the printed messages
  will occur.
  </p>

  <p>Added missing <code>getInstance</code> methods to the
  <code>Category</code> class in the log4j-over-slf4j module, fixing
  <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=95">bug 95</a>
  reported by Michael Rumpf.</p>

  <hr noshade="noshade" size="1"/>

  <h3>June 8th, 2008 - Release of SLF4J 1.5.2</h3>

  <p>Improvements to SLF4J documentation as well as fix of <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=88">packaging
  problems</a> related to <em>jul-to-slf4j.jar</em> and
  <em>jcl104-over-slf4j.jar</em>.
  </p>
  
  <h3>June 5th, 2008 - Release of SLF4J 1.5.1</h3>

  <p>See also the <a href="compatibility.html#1_5_1">compatibility
  report for this version</a>.</p>

  <p>In order to support JCL version 1.1.1, the
  <em>jcl<b>104</b>-over-slf4j</em> module was renamed as
  <em>jcl-over-slf4j</em>. SLF4J will no longer ship with
  <em>jcl104-over-slf4j.jar</em> but with <em>jcl-over-slf4j.jar</em>.
  The related work responds to enhancement request discussed in <a
  href="http://jira.qos.ch/browse/SLF4J-76">issue 76</a> as
  reported by Niklas Gustavsson.
  </p>
  
  <p>The <em>slf4j-jcl</em> binding now depends on commons-logging
  version 1.1.1 instead of the older 1.0.4</p>


  <p>Added a java.util.logging to SLF4J bridge as requested in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=38">bug 38</a> by
  Christian Stein, David Smiley, Johan Ferner, Joern Huxhorn and
  others.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=68">bug
  68</a> reported by Su Chuan and David Rauschenbach. SLF4J requires
  log4j 1.2.12 or later. However, if an older version of log4j is
  present (lacking the TRACE level), in order to avoid
  NoSuchMethodError exceptions, the SLF4J's
  <code>Log4jLoggerAdapter</code> will map the TRACE level as DEBUG.
  </p>

  
  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=78">bug
  78</a> reported by Venu Thachappilly. If the argument array passed
  to a Logger printing method (debug, info, etc.) was null, a
  <code>NullPointerException</code> was thrown. With the correction,
  the messagePattern is returned as is, without parameter
  substitution.
  </p>


  <p>Added the <code>getCopyOfContextMap</code> and
  <code>setContextMap</code> methods to the <code>MDCAdapter</code>
  and <code>org.sf4j.MDC</code> classes. This was requested in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=84">bug 84</a> by
  Anton Tagunov.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=74">bug
  74</a>, an endless recursion problem in Marker.contains method,
  reported by Michael Newcomb. Also added he
  <code>getDetachedMarker</code> method to <code>IMarkerFactor</code>
  and <code>MarkerFactory</code> classes which was indirectly
  requested in bug 74.
  </p>

  <p>Added the methods <code>getLevel()</code> and
  <code>getEffectiveLevel()</code> to the <code>Category</code> class
  in log4j-over-slf4j. This addition was requested in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=74">bug 74</a> by
  Michael Newcomb.
  </p>

  <p>The <a href="migrator.html">SLF4J Migrator</a>
  tool has been improved to support migration from JUL to SLF4J.
  </p>

  <p>In <code>MarkerIgnoringBase</code> class, corrected mapping of
  trace methods with markers to their equivalents without marker
  data. Previously, the mapping was trace to debug. The incorrect
  mapping affected only calls to the trace method with
  markers. Interestingly enough, this bug was picked up by new unit
  tests and has not been reported as a bug by our users.
  </p>
  

  <h3>February 26th, 2008 - Release of SLF4J 1.5.0</h3>


  <p>A tool called <a href="migrator.html">SLF4J Migrator</a> now
  ships with SLF4J. It can help you migrate your project using JCL or
  log4j to use SLF4J instead.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=61">bug
  61</a> reported by Christopher Sahnwaldt. It is now possible to
  place a backslash in front of a formatting anchor, by escaping the
  backslash. For example, the call to
  <code>MessageFormatter.format("C:\\\\{}", "foo")</code> will now
  correctly return "C:\\foo". The backslash character needs to be
  escaped in Java, which leads to four backslashes.
  </p>

 
  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=63">bug
  63</a> reported by Maarten Bosteels. SLF4J now supports MDC for
  <code>java.util.logging</code> package.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=64">bug
  64</a> reported by Michal Bernhard. The log4j binding will now alert
  the user if she uses SLF4J with a version of log4j earlier than 1.2.12.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=65">bug
  65</a> reported by Ben Gidley. Superfluous
  &lt;version>$&#x7B;parent.version}&lt;/version> lines have been
  removed from pom.xml files. These lines reportedly confuse certain
  Maven repositories.
  </p>

  <p>In the <code>org.apache.log4j.Category</code> class, as
  implemented in the log4j-over-slf4j module, calls to the printing
  trace() are now correctly mapped to SLF4J's trace() printing method
  (instead of debug()). Superfluous printing methods with the
  signature <code>xxxx(Object, Object)</code> and <code>xxxx(String,
  Object, Object)</code> have been removed.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=67">bug
  67</a> reported by Chris Custine.  The manifest file for
  jcl104-over-slf4j now correctly declares version 1.0.4 for the
  exported JCL packages.
  </p>


  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=69">bug
  69</a> reported by Joern Huxhorn, who graciously supplied the fix as
  well as a test case. The <code>add</code> method in
  <code>BasicMarker</code> class now correctly prevents multiple
  addition of the same child. Moreover, the <code>remove</code> method
  now correctly removes the specified child marker.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=41">bug
  41</a> reported by Sebastian Davids. The manifest files of various
  projects now mention J2SE-1.3 as the required execution
  environment.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=71">bug
  71</a> reported by Manfred Geiler. The SLF4JLog and
  SLF4JLocationAwareLog classes are now serializable solving
  serialization problems encountered with certain libraries which
  attempt to serialize JCL log instances.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=73">bug
  73</a> reported by Oleg Smirsky. A "Fragment-Host: slf4j.api" line
  has been added to every MANIFEST.MF file exporting
  <code>org.slf4j.impl</code>.
  </p>


  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=72">bug
  72</a> reported by Ian Carr. Performance issues with slf4j-jdk14 for
  disabled log statements have now been corrected.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>August 20th, 2007 - Release of SLF4J 1.4.3</h3>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=60">bug
  60</a> as reported by Costin Leau. OSGI manifest entries now declare
  the correct SLF4J version.
  </p>
  
  <p>Clarified the behavior of the various methods methods in the MDC
  class with respect to "null" parameters. This was requested in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=58">bug 58</a> by
  Sebastian Davids.
  </p>

  <p>Removed the slf4j-archetype module because nobody seems to have a
  use for it.</p>

  <h3>July 12th, 2007 - Release of SLF4J 1.4.2</h3>

  <p>The <a href="log4j-over-slf4j.html">log4j-over-slf4j</a> module
  has been moved back into SLF4J. Originally, this module was part of
  SLF4J and was moved into logback due to the lack of MDC support in
  SLF4J. With version 1.4.2 and the addition of MDC support in SLF4J
  1.4.1, log4j-over-slf4j returns to its original home. Note that the
  previous name of the module was <a
  href="http://logback.qos.ch/bridge.html">log4j-bridge</a>.
  </p>

  <p>Addition of the <code>getMDCAdapter</code> method to
  org.slf4j.MDC class. This allows access to the actual MDC
  implementation which can on occasion come in very handy.
  </p>

  <hr noshade="noshade" size="1"/>



  <h3>July 4th, 2007 - Release of SLF4J 1.4.1</h3>


  <p>SLF4J now supports <a href="manual.html#mdc">Mapped Diagnostic
  Contexts</a> (MDC) as requested by Andy Gerweck and Steve Ebersole
  in <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=49">bug
  49</a>.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=53">bug
  53</a> as reported by Heinrich Nirschl.  The public method
  <code>trace(String)</code> in the <code>Log4jLoggerAdapter</code>
  class incorrectly called the underlying log4j logger with level DEBUG
  instead of TRACE.
  </p>

  <p>Fixed various documentation related errors kindly reported by
  Mark Vedder.
  </p>


  <hr noshade="noshade" size="1"/>


  <h3>May 16th, 2007 - Release of SLF4J 1.4.0</h3>


  <p>In response to many user requests over time, the TRACE level has
  been added to <a
  href="api/org/slf4j/Logger.html">org.slf4j.Logger</a>
  interface. Please also see the <a href="faq.html#trace">FAQ entry
  discussing</a> the TRACE level.
  </p>


  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=47">bug
  47</a> as reported by Terry Todd.  In previous a SLF4J release the
  <code>org.apache.commons.logging.impl.SLF4FLogFactory</code> class
  was renamed as <code>SLF4JLogFactory</code>. The
  <em>META-INF/services/org.apache.commons.logging.LogFactory</em>
  resource file had not reflected this change. It does now.
  </p>


  <p>Eric Yung <a
  href="http://www.slf4j.org/pipermail/user/2007-April/000327.html">reported</a>
  that Apache commons-configuration access certain commons-logging
  classes, namely <code>org.apache.commons.logging.impl.NoOpLog</code>
  and SimpleLog, directly. Following Eric's suggestion,
  jcl104-over-slf4j now includes the aforementioned classes.
  </p>
  

  <hr noshade="noshade" size="1"/>

  <h3>April 15th, 2007 - Release of SLF4J 1.3.1</h3>


  <p>In response to a <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=39">enhancement
  request</a> made by Michael Newcomb, a marker can now be detached
  from the internal list of the <code>MarkerFactory</code> that
  generated it.
  </p>

  <p>Fixed a silly but nonetheless annoying bug where log request of
  level ERROR made through jcl104-over-slf4j would log twice. This bug
  was <a
  href="http://www.slf4j.org/pipermail/user/2007-April/000323.html">reported</a>
  and precisely described by Andrew Cooke.
  </p>


  <hr noshade="noshade" size="1"/>

  <h3>February 25th, 2007 - Release of SLF4J 1.3.0</h3>

  <p>This release consists of rearrangement of classes among
  projects. More specifically, the
  <code>org.slf4j.LoggerFactory</code> class is now packaged within
  the <em>slf4j-api.jar</em> file instead of the various slf4j
  bindings. <b>It follows that client code needs to depend on only
  slf4j-api in order to compile, while the various slf4j bindings are
  only needed as runtime dependencies.</b> See also the <a
  href="faq.html#maven2">Maven2-related FAQ entry</a>. Given the
  practical significance of this change, we highly recommend that
  library-authors upgrade to version 1.3 at their earliest
  convenience. 
  </p>
  
  <p><a href="http://bugzilla.slf4j.org/show_bug.cgi?id=23">Bug number
  23</a> has been fixed, at the cost of minor and backward compatible
  changes. In other words, jcl104-over-slf4j now preserves caller
  location information.
  </p>
  
  <p>It is now possible to obtain the root logger of the underlying
  logging implementation by requesting a logger named
  &quot;ROOT&quot;. This feature was requested by Sebastien Davids
  in <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=35">bug
  report 35</a>. </p>

  <p>For  an   exact  list   of  changes  please   refer  to   the  <a
  href="changes/changes-1.3.txt">1.3.0  compatibility  report</a> file
  as generated by clirr.</p>

  
  <hr noshade="noshade" size="1"/>

  <h3>January 24th, 2007 - Release of SLF4J 1.2</h3>
  <p>This release includes several modifications to make SLF4J
  an <a href="http://www.osgi.org/">OSGi</a>-friendly framework. 
  The modules' MANIFEST.MF files now include
  OSGi metadata. Regarding these improvements, and OSGi in general, the
  SLF4J project is happy to welcome John E. Conlon  as a new committer.
  </p> 
  
  <p>Marker objects are now Serializable.
  </p>
  
  <hr noshade="noshade" size="1"/>

  <h3>December 21st, 2006 - Release of SLF4J 1.1.0 (final)</h3>

  <p>This release consists of minor bug fixes and documentation
  changes. More importantly, the log4j-over-slf4j module has been
  moved to the logback project, under the name <a
  href="http://logback.qos.ch/bridge.html">log4j-bridge</a>.
  </p> 

   <p>Added the file "org.apache.commons.logging.LogFactory" under
   META-INF/services directory which went missing in the 1.1.0 series
   of SLF4J. This fixes a compatibility problem with Apache Axis which
   uses its own discovery mechanism, namely, commons-discovery version
   0.2. The problem was reported in bug <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=33">report 33</a>
   by David Varnes.
  </p>

  <p>The file jcl104-over-slf4j.jar had various entries missing in its
  MANIFEST.MF file, as reported by Boris Unkel in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=30">bug number
  30</a>.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>November 16th, 2006 - Release of SLF4J 1.1.0-RC1</h3>

  <p>This release consists of packaging related bug fix in addition to
  minor documentation changes.  
  </p> 
  
  <p>Contrary to RC0, RC1 no longer uses SNAPSHOT versions for the
  slf4j-parent pom. The solution to <a
  href="http://ceki.blogspot.com/2006/11/solution-to-maven2-version-number.html">Maven
  version problem</a> does not work for public projects such as SLF4J
  because SNAPSHOTs are not allowed on ibiblio.
  </p>


  <hr noshade="noshade" size="1"/>

  <h3>November 4th, 2006 - Release of SLF4J 1.1.0-RC0</h3>

  <p>This release consists of bug fixes. Moreover, since the major
  packaging related changes in 1.1.0-beta0 seem to work well, this
  release is marked as RC0.</p>

  <p>Fixed the JDK 1.5 dependency for the SLF4J build, as reported by
  Boris Unkel in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=28">bug number
  28</a>. SLF4J now explicitly declares a dependency on JDK 1.4 in its
  pom.xml file.
  </p>

  <p>Fixed an incorrect reference to the logback project in slf4j-api
  pom file. This bug was reported by Boris Unkel in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=29">bug number
  29</a>.
  </p>

  <p>Fixed a synchronization problem in factories of almost all SLF4J
  bindings. This bug was reported independently by Howard M. Lewis Ship
  and Boris Unkel in bug reports <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=26">26</a> and
  respectively <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=26">27</a>.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>September 7th, 2006 - Release of SLF4J 1.1.0-beta0</h3>

  <p>Release 1.1.0-beta0 is a relatively important release with a
  refactoring of the way class files are organized in jar files. In
  previous releases, each binding was self-contained in a single jar
  file. In this release, each and every binding depends on
  <em>slf4j-api.jar</em> which contains the bulk of the classes
  required to use SLF4J, except for one or two adapter classes.  Only
  the adapter classes are now shipped with each specific binding jar
  as appropriate for the underlying logging system..
  </p>

  <p>This release is built using Maven instead of Ant. As for the java
  code, it has not been changed.</p>
    
  <hr noshade="noshade" size="1"/>

  <h3>June 8th, 2006 - Release of SLF4J 1.0.2</h3>

  <p>Release 1.0.2 is a maintenance release containing bug fixes
  only.</p>

  <ul>

    <li>Fixed <a
    href="http://bugzilla.slf4j.org/show_bug.cgi?id=22">bug number
    22</a> reported by Bjorn Danielsson. This version of the SLF4J API
    will no longer systematically throw an exception when the
    <code>o.a.c.l.impl.SLF4FLogFactory#release()</code> method is
    invoked. Instead, the <code>release()</code> method will issue a
    <a href="http://www.slf4j.org/codes.html">warning</a>.

    </li>

  </ul>

  <hr noshade="noshade" size="1"/>

  <h3>May 1st, 2006 - Release of SLF4J 1.0.1</h3>

  <p>Release 1.0.1 is a maintenance release containing bug fixes
  only.</p>

  <ul>

    <li>Fixed <a
    href="http://bugzilla.slf4j.org/show_bug.cgi?id=20">bug number
    20</a> reported by Steve Bate. <code>JDK14LoggerAdapter</code>
    will now correctly relay the logger name to the underlying JDK 14
    logging system.
    </li>

    <li>Added the file "org.apache.commons.logging.LogFactory" under
    META-INF/services directory in the jcl104-over-slf4j jar
    file. This fixes a compatibility problem with Apache Axis which
    uses its own discovery mechanism, namely, commons-discovery
    version 0.2. The bug was reported by Dave Wallace.
    </li>

  </ul>

  
  <hr noshade="noshade" size="1"/>

  <h3>March 8th, 2006 - Release of SLF4J 1.0</h3>

  <p>This is release labeled as 1.0 (final) contains few relatively
  minor changes:
  </p>

  <ul>
    <li>As <a
    href="http://marc.theaimsgroup.com/?t=114063163800004">discussed</a>
    on the slf4j user list, <code>SimpleLogger</code> now directs its
    output to stderr instead of stdout.
    </li>
    
    <li>Modified <code>JDK14LoggerAdapter</code> so that caller
    information is now correctly printed, as reported in <a
    href="http://bugzilla.slf4j.org/show_bug.cgi?id=13">bug 13</a> by
    Peter Royal.
    </li>

    <li>Minor additions to the Marker interface.</li>

  </ul>
  
  <hr noshade="noshade" size="1"/>

  <h3>February 4th, 2006 - Release of SLF4J 1.0-RC6 and NLOG4J
  1.2.22</h3>

  <p>The <code>MarkingLogger</code> interface has been removed and its
  contents merged into <code>org.slf4j.Logger</code>. This change
  should not adversely affect end-users. However, SLF4J bindings need
  to be updated. This has been done for all the bindings shipped with
  SLF4J distribution as well as NLOG4J. As for x4juli, the update is
  planned for its next release.
  </p>

  <p>The merge between the <code>MarkingLogger</code> and
  <code>Logger</code> interfaces has been motivated by the need to
  allow end-users to easily switch between logging systems that
  support markers and those that do not.
  </p>

  <p>Added a default instance to SimpleLoggerFactory to serve as a
  last resort fallback mechanism. This instance is designed to be used
  by a very specific group of users, namely for those developing
  logging systems (e.g. log4j or LOGBack). It is not intended for
  end-users of the SLF4J API.
  </p>

 <hr noshade="noshade" size="1"/>

  <h3>January 9th, 2006 - Release of SLF4J 1.0-RC5 and NLOG4J
  1.2.21</h3>

  <p>A maintenance release correcting bugs <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=11">#11</a> and <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=12">#12</a> and in
  general improved resilience to null input parameters across
  implementations. Many thanks to Boris Unckel and Kenneth for
  reporting the null input issue.
  </p>
  
 <hr noshade="noshade" size="1"/>

  <h3>December 27th, 2005 - Release of SLF4J 1.0-RC4 and NLOG4J
  1.2.20</h3>


  <p>The printing methods in <code>org.slf4j.Logger</code> interface
  now support passing 3 or more parameters in an <code>Object</code>
  array. This was a frequently requested feature missing in previous
  versions of SLF4J.
  </p>

  <p>NLOG4J 1.2.20 reflects the addition of new methods in the
  <code>org.slf4j.Logger</code> interface.</p>

  <hr noshade="noshade" size="1"/>

  <h3>December 8th, 2005 - Release of SLF4J 1.0-RC3</h3>

  <p>Maintenance release fixing reported bugs <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=6">#6</a> and <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=7">#7</a>.
  </p>


  <h3>November 28th, 2005 - Release of SLF4J 1.0-RC2</h3>

  <p>In response to a request by Greg Wilkins, this release adds the
  jar file <em>slf4j-jcl.jar</em>, an SLF4J binding for JCL. Please
  read the <a href="manual.html#gradual">gradual migration section</a>
  in the manual for more details.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>November 21st, 2005 - Release of SLF4J 1.0-RC1</h3>

  <p>A maintenance release correcting bugs <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=4">#4</a> and <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=5">#5</a>. Many
  thanks to Christian Beil for accurately reporting bug #4.
  </p>
  
  <p>There has been also an effort to minimize the file sizes of the
  various jar files produced by SLF4J, resulting in jar files
  approximately 40% smaller than in version 1.0beta9.
  </p>

  <p>Given that the SLF4J API is now deemed stable, this release is
  marked as RC1, that is release candidate number 1.
  </p>


  <hr noshade="noshade" size="1"/>

  <h3>October 19th, 2005 - Release of SLF4J 1.0-beta9</h3>

  <p>The SLF4J distribution now includes two distinct bindings
  <em>slf4j-log4j12.jar</em> and <em>slf4j-log4j13.jar</em> in order
  to differentiate between log4j version 1.2 and version 1.3. This
  distinction is absolutely necessary because log4j 1.2 and 1.3 are
  not run-time compatible, although they are mostly compile-time
  compatible.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>October 19th, 2005 - Release of SLF4J 1.0-beta8 and NLOG4J 1.2.18</h3>


  <p>Added a new SLF4J binding, <em>slf4j-log4j.jar</em>, intended to
  be used in conjunction with vanilla <em>log4j.jar</em>, as
  distributed by the <a href="http://logging.apache.org">Apache
  Logging Services</a> project. The slf4j-log4j binding is quite
  similar in structure to the JDK 1.4 binding that existed
  previously. 
  </p>

  <p>The slf4j-log4j binding addresses compatibility problems which
  arose when copies of both <em>log4j.jar</em> and <em>nlog4j.jar</em>
  lay on the class path, in particular when it was undesirable or
  impossible to remove the preexisting <em>log4j.jar</em> file.
  </p>

  <p>Methods in the <code>org.slf4j.Logger</code> interface related to
  markers were moved to a separate super interface called <a
  href="api/org/slf4j/MarkingLogger.html">
  <code>org.slf4j.MarkingLogger</code></a>. This refactoring reduces
  the weight of the <a href="api/org/slf4j/Logger.html">
  <code>Logger</code></a> interface.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>August 28th, 2005 - Release of SLF4J 1.0-beta7 and NLOG4J 1.2.17</h3>

  <p>Spurred by <a
  href="http://jira.qos.ch/browse/SLF4J-1">SLF4J-1</a>, SLF4J binding
  code has been refactored and simplified. Logging systems
  implementing SLF4J interfaces have to have less work in order to
  bind with SLF4J. Moreover, these changes have no incidence on the
  published interface of SLF4J.
  </p>

  
  <hr noshade="noshade" size="1"/>

  <h3>August 26th, 2005 - Release of SLF4J 1.0-beta6</h3>

  <p>To ease migration to SLF4J from JCL, this release includes a jar
  file called <em>jcl-over-slf4j-1.0.4.jar</em>. This jar file can be
  used as drop-in replacement for JCL version 1.0.4. It implements the
  public API of JCL using SLF4J underneath.
  </p>

  <p>Thus, you can immediately benefit from the advantages of SLF4J
  without waiting for all the libraries you depend on to migrate to
  SLF4J first.</p>
 
  <hr noshade="noshade" size="1"/>

  <h3>August 16th, 2005 - Release of NLOG4J 1.2.16</h3>

   <p>This release adds solves a compatibility problem between log4j
  and nlog4j.  Previous to this release, code compiled with log4j
  would not run correctly with nlog4j.
  </p>

  <p>With the fixes introduced in NLOG4J 1.2.16, code compiled with
  log4j 1.2.x will run without problems when deployed using NLOG4j.
  </p>

  <p>However, the inverse is not true. Code compiled with nlog4j can
  only be deployed using nlog4j.
  </p>
 
  <hr noshade="noshade" size="1"/>
  
  <h3>August 12th, 2005 - Release of SLF4J 1.0-beta5 and NLOG4J
  1.2.15</h3>

  <p>This release adds support for the <a
  href="api/org/slf4j/Marker.html">Marker</a> interface. Thus, log
  statements can be decorated with Marker data allowing more
  expressive power in the processing of log statements.
  </p>

  <p>For the sake of IoC frameworks, <code>Logger</code> instances can
  new be queried for their <a
  href="api/org/slf4j/Logger.html#getName()">name</a>.
  </p>

  <p>With the addition of markers, sub-domains are no longer
  needed.</p>

  <p>The <code>LoggerFactoryAdapter</code> has been simplified and
  renamed as <a
  href="api/org/slf4j/ILoggerFactory.html"><code>ILoggerFactory</code></a>.
  </p>
  
  <hr noshade="noshade" size="1"/>

  <h3>July 5th, 2005 - Release of NLOG4J 1.2.14</h3>
 
  <p>This release fixes compatibility problems between NLOG4J and
  Jakarta Commons Logging.
  </p>

  <hr noshade="noshade" size="1"/>
  
  <h3>June 28th, 2005 - Release of SLF4J 1.0-beta4 and NLOG4J
  1.2.13</h3>

  <p>Following discussions on the SLF4J developers list, the
  signatures of the printing methods in <a
  href="api/org/slf4j/Logger.html"><code>org.slf4j.Logger</code></a>
  interface have been modified to admit messages of type
  <code>String</code> instead of type <code>Object</code> as
  previously. The current set of printing methods is listed below.
  </p>

  <pre class="source">
 void debug(String msg); 
 void debug(String format, Object arg); 
 void debug(String format, Object arg1, Object arg2); 
 void debug(String msg, Throwable t); 

 void error(String msg); 
 void error(String format, Object arg;) 
 void error(String format, Object arg1, Object arg2); 
 void error(String msg, Throwable t); 
      
 void info(String msg); 
 void info(String format, Object arg); 
 void info(String format, Object arg1, Object arg2); 
 void info(String msg, Throwable t); 
      
 void warn(String msg); 
 void warn(String format, Object arg); 
 void warn(String format, Object arg1, Object arg2); 
 void warn(String msg, Throwable t);  </pre>
 

  <p>NLOG4J release 1.2.13 reflects changes in the SLF4J API.
  </p>

  <p>You can download SLF4J and NLOG4J, including full source code,
  class files and documentation on our <a
  href="download.html">download page</a>.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>May 17th, 2005 - SLF4J version 1.0-beta-3 released</h3>

  <p>In response to user comments, the <code>org.slf4j.ULogger</code>
  interface has been renamed as <code>org.slf4j.Logger</code>.
  </p>


  <hr noshade="noshade" size="1"/>

  <h3>May 17th, 2005 - NLOG4J version 1.2.12 released</h3>

  <p>SLF4J.ORG is proud to release NLOG4J 1.2.12, a log4j-replacement
  with native SLF4J API support.  Except for users of LF5, chainsaw or
  <code>NTEvenAppender</code>, NLOG4J should be considered as a 100%
  compatible, drop-in replacement for log4j version 1.2.9. 
  </p>

  <p>This release reflects changes in the SLF4J API, i.e renaming of
  <code>org.slf4j.ULogger</code> interface as
  <code>org.slf4j.Logger</code>.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>May 17th, 2005 - SLF4J version 1.0-beta-3 released</h3>

  <p>SLF4J.ORG is proud to release SLF4J 1.0-beta-3. In response to
  user comments, the <code>org.slf4j.ULogger</code> interface has been
  renamed as <code>org.slf4j.Logger</code>.
  </p>

  <p>You can download SLF4J, including full source code, class files
  and documentation on our <a href="download.html">download page</a>.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>May 14th, 2005 - NLOG4J version 1.2.11 released</h3>

  <p>SLF4J.ORG is proud to release NLOG4J 1.2.11, a log4j-replacement
  with native SLF4J API support.  Except for users of LF5, chainsaw or
  <code>NTEvenAppender</code>, NLOG4J should be considered as a 100%
  compatible, drop-in replacement for log4j version 1.2.9.
  </p>

  <p>You can download NLOG4J version 1.2.11, including full source
  code, class files and documentation on our <a
  href="download.html">download page</a>.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>May 4th, 2005 - SLF4J version 1.0-beta-2 released</h3>

  <p>SLF4J.ORG is proud to release SLF4J 1.0-beta-2. This release
  contains cosmetic or javadoc changes. For example, the project has a
  new logo.
  </p>

  <p>You can download SLF4J version 1.0-beta2, including full source
  code, class files and documentation on our <a
  href="download.html">download page</a>.
  </p>


  <hr noshade="noshade" size="1"/>

  <h3>1 May 2005 - not-log4j-1.2.10 released</h3>

  <p>Subsequent to the recall of log4j 1.2.10, SLF4J.ORG releases
  non-log4j-1.2.10 for those interested in SLF4J support in log4j.
  </p>

  <p>You can download not-log4j version 1.2.10, including full source
  code, class files and documentation on our <a
  href="download.html">download page</a>.
  </p>

  <hr noshade="noshade" size="1"/>


  <h3>22 April 2005 - SLF4J project goes live</h3>

  <p>The SLF4J project site, including SVN repositories go
  live. Users can download SLF4J version 1.0-beta1.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>15 April 2005 - start of work on SLF4J source code</h3>

  <p>Start of work on the SLF4j source code.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>13 April 2005 - start of work on SLF4J project</h3>

  <p>Launch of the SLF4J project. Work has begun on the web-site, svn
  repositories as well as the source code.  </p> <script
  src="templates/footer.js" type="text/javascript"></script> </div>
  </body> </html>
